perm filename PIX.SAI[PIX,HPM]5 blob
sn#032889 filedate 1973-04-01 generic text, type T, neo UTF8
00100 BEGIN "PIX"
00200
00300 REQUIRE "HELIB[1,3]" LIBRARY;
00400 REQUIRE "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
00500 REQUIRE "SOBMAT[SYS,HE]" LOAD_MODULE;
00600 REQUIRE 2000 STRING_SPACE;
00700 REQUIRE "⊂⊃||" DELIMITERS;
00800
00900 DEFINE α=⊂COMMENT⊃, EXT=⊂EXTERNAL⊃, INT=⊂INTEGER⊃, PRO=⊂PROCEDURE⊃,
01000 CRLF=⊂'15&'12⊃, BHEAD(BUF)=⊂(BUF+1) LAND '777777⊃, REF=⊂REFERENCE⊃,
01100 RED=⊂0⊃, BLUE=⊂1⊃, GREEN=⊂2⊃, CLEAR=⊂3⊃;
01200 EXT PRO PICINI(INT CHAN, FILE, EXTEN, PPN;REF BOOLEAN FAIL;INT ARRAY STOR);
01300 EXT PRO PICRD(REF BOOLEAN FAIL; INT ARRAY STOR);
01400 EXT PRO PICWR(INT CHAN, FILE, EXTEN, PPN; REF BOOLEAN FAIL; INT ARRAY STOR);
01500 EXT PRO RELCOR(INT IOWD);
01600 EXT INT PRO GETCOR(INT SIZE);
01700 EXT PRO INP;
01800 EXT INT PRO GIOWD(INT ARRAY BUF);
01900 EXT PRO EYECAL(INT SIZE, FRAM, FLAG; INT ARRAY BUF);
02000 EXT PRO CWHEEL(INT CODE);
02100 EXT PRO TVINN;
02200 EXT PRO PRDUMP;
02300 EXT PRO PORTR;
02400 EXTERNAL PROCEDURE SPWON(INTEGER TIC;REFERENCE INTEGER ADDR);
02500 EXTERNAL PROCEDURE CALLEN;
02600 EXTERNAL PROCEDURE SPWOFF;
02700 EXT INT TVWORD, FLINE, LLINE, RSIDE, LSIDE, TCLIP, BCLIP, PRTBUF,
02800 L1, L2, L3, P1,P2,P3,STATUS,TSERVO,LENS,TVCAM;
02900
03000 SAFE INT ARRAY PNTRS[1:25];
03100 SAFE REAL ARRAY CAMERA_MODEL[1:10,1:3],PPOT0,PPOTD,TPOT0,TPOTD,FPOT0,FPOTD,
03200 MART,SWING,FOC,FOCLEN0,FOCLENG[1:4],DP,P0[1:4,1:3],PP[1:4,1:2];
03300 INT N, LIN, LINN, I, II, III, ANS, TVLENG, RFNAM, RFNUM, SEQNO;
03400 REAL PANPOT, FOCPOT, TILPOT;
03500 LABEL RUSE, LOOP, TKE, SKE;
03600 STRING STR, INS;
03700 PRELOAD_WITH "R","B","G"; STRING ARRAY CFIRST[1:3];
03800 SAFE INTEGER ARRAY PICALLOC[1:3]; α allocation table for data blocks;
03900 α first we initialize the world;
04000 OUTSTR("TYPE ? FOR HELP"&CRLF);
04100 SEQNO←0;
04200 QUICK_CODE '051000000000 '10,0; END;
04300 INS ← INCHWL;
04400 CLRBUF;
04500 WHILE LENGTH(INS) ≥ 2 ∧ INS[1 TO 1] ≠ ";" DO INS ← INS[2 TO ∞];
04600 LIN ← IF INS[1 TO 1]=";" THEN CVO(INS[2 TO ∞]) ELSE '15;
04700 LINN ← 1;
04800 LOOP: TVCAM ← IF (LIN LAND 7) = 1 THEN 1 ELSE
04900 IF (LIN LAND 7) = 2 THEN 2 ELSE
05000 IF (LIN LAND 7) = 3 THEN 3 ELSE 0;
05100 START_CODE
05200 LABEL XX1,GOO;
05300 JRST GOO;
05400 XX1: '401400000000 LIN;
05500 GOO: MOVE 1,LINN;
05600 LSH 1,18;
05700 IOR 1,XX1;
05800 CALLI 1,'400070;
05900 SKIP 0;
06000 END;
06100 TCLIP ← 0;
06200 BCLIP ← 7;
06300 PICALLOC[1] ← PICALLOC[2] ← PICALLOC[3] ← PNTRS[1] ← 0;
06400 ARRBLT(PNTRS[2],PNTRS[1],24);
06500 FLINE←'13;
06600 LLINE←'373;
06700 RSIDE←'512;
06800 LSIDE←'13;
06900 TVLENG ← ((RSIDE-LSIDE)/9+1)*(LLINE-FLINE+1);
07000 PICALLOC[1] ← GETCOR(TVLENG);
07100 IF TVCAM = 1 THEN
07200 BEGIN
07300 PICALLOC[2]←GETCOR(TVLENG);
07400 PICALLOC[3]←GETCOR(TVLENG);
07500 END;
07600 IF (RFNUM ← RFNUM - 1)≥0 THEN
07700 BEGIN
07800 I←'40;
07900 GO TO TKE;
08000 END;
08100 OUTSTR("*");
08200 IF (I ← INCHRW) = '175 THEN
08300 BEGIN
08400 OUTSTR("CHANNEL=");
08500 LIN←CVO(INCHWL);
08505 IF LIN≥'40 THEN LIN←LIN LAND '17
08510 ELSE LIN←1 LSH (35-LIN);
08600 GO TO RUSE;
08700 END ELSE
08800 IF I = '12 THEN
08900 BEGIN
09000 OUTSTR("LINE=");
09100 LINN←CVO(INCHWL);
09200 GO TO RUSE;
09300 END ELSE
09400 IF I = "?" THEN
09500 BEGIN
09600 OUTSTR(CRLF&"THIS PROGRAM ALLOWS YOU TO SNAP DDVID
09700 COMPATIBLE PICTURES FROM ANY VIDEO SOURCE
09800 WITH A MINIMUM OF FUSS. THE DEFAULT SOURCE
09900 (CHANNEL) IS THE TV RECIEVER IN THE LOUNGE
10000
10100 TYPE SPACE TO TAKE A PICTURE
10200
10500 TYPE A DIGIT FOR RAPID FIRE MODE
10600 n FILES CALLED PIXn.mmm WILL BE PRODUCED
10700 (n BEING YOUR DIGIT, AND mmm A SEQUENCE
10800 NUMBER), ONE EVERY FEW SECONDS
10900
11000 FOR CHAN 51 (THE OLD HAND EYE CAMERA)
11100 YOU MAY ALSO TYPE
11200 C - TO TAKE A COLOR PICTURE (THREE FILES)
11300 {R,G,B} - TO TAKE A FILTERED PICTURE
11400
11450 TYPE ALTMODE TO CHANGE CHANNEL
11500 CHANNELS ARE:
11600 47 - VIDEO SYNTHESIZER
11700 51 - OLD (COHU) HAND EYE CAMERA
11800 52 - NEW (SIERRA) HAND EYE CAMERA
11900 53 - BAUMGART'S LINE (THE FONT CAMERA, MAYBE)
12000 55 - LOUNGE TV RECEIVER
12100 nn - ANY DD CHANNEL YOU CAN LOOK AT WITH <ESC>nnS
12200
12300 IF YOU DECIDE YOU DON'T WANT A PICTURE AFTER ALL
12400 SIMPLY ANSWER THE 'FILE=' WITH A CARRIAGE RETURN,
12500 OTHERWISE NAME A FILE FOR IT TO BE STORED ON
12550
12575 YOU MAY MONITOR THE PICTURE TAKING PROCESS AT
12587 DD TERMINALS BY HITTING <ESC>54S. THE DIGITIZER
12593 CURSOR WILL CAUSE THE IMAGE TO FLASH AS A FRAME
12596 IS TAKEN"&CRLF);
12600 CLRBUF;
12700 GO TO RUSE;
12800 END ELSE
12900 IF I≥"0" ∧ I≤"9" THEN
13000 BEGIN
13100 RFNUM←(RFNAM←I)-"0";
13200 GO TO RUSE;
13300 END;
13400 TKE: I ← IF I > '140 ∧ I < '173 THEN I - '40 ELSE I;
13500 II ← IF I = '103 THEN RED ELSE
13600 IF I = '102 THEN BLUE ELSE
13700 IF I = '107 THEN GREEN ELSE
13800 IF I = '122 THEN RED ELSE CLEAR;
13900 III ← IF I = '103 ∧ TVCAM = 1 THEN GREEN ELSE II;
14000 N ← 0;
14100 FOR I ← II STEP 1 UNTIL III DO
14200 BEGIN EXTERNAL INTEGER IND;
14300 IF TVCAM = 1 THEN
14400 BEGIN
14500 CWHEEL(6);
14600 IF IND ≠ I THEN
14700 BEGIN INTEGER M;
14800 CWHEEL(I);
14900 M ← 12000;
15000 WHILE M ← M - 1 DO;
15100 END;
15200 END;
15300 TVWORD ← PICALLOC[N ← N + 1];
15400 TVINN;
15500 END;
15600 BEGIN "DSKOUT"
15700 INTEGER FILE, PPN, EXTEN, FAIL;
15800 STRING FILOUT;
15900 LABEL LOOP3;
16000 LOOP3: IF RFNUM≥0 THEN
16100 BEGIN
16200 STR←"PIX"&RFNAM&"."&CVS(SEQNO←SEQNO+1);
16300 GO TO SKE;
16400 END;
16500 OUTSTR("FILE=");
16600 STR ← INCHWL;
16700 SKE: IF LENGTH(STR)≠0 THEN
16800 FOR I ← 1 STEP 1 UNTIL III-II+1 DO
16900 BEGIN
17000 PNTRS[1]←PICALLOC[I];
17100 FILOUT←IF II=III THEN STR ELSE CFIRST[I]&STR;
17200 FILE←CVFIL(FILOUT,EXTEN,PPN);
17300 PICWR(1,FILE,EXTEN,PPN,FAIL,PNTRS);
17400 IF FAIL THEN BEGIN USERERR(0,0,"WRITING OF FILE "
17500 &FILOUT&" FAILED"); GO TO LOOP3;END;
17600 OUTSTR("FILE "&FILOUT&" WRITTEN OUT"&CRLF);
17700 END;
17800 END "DSKOUT";
17900 α return for next picture;
18000
18100 RUSE: FOR I ← 1 STEP 1 UNTIL 3 DO
18200 BEGIN
18300 IF PICALLOC[I] THEN RELCOR(PICALLOC[I]);
18400 PICALLOC[I] ← PNTRS[I] ← 0;
18500 END;
18600 GO TO LOOP;
18700 END;